package cn.itcast.usermanage.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.itcast.usermanage.pojo.EasyUIResult;
import cn.itcast.usermanage.pojo.User;
import cn.itcast.usermanage.service.UserService;

@RequestMapping("user")
@Controller
public class UserController {
	
	@Autowired
	private UserService userServicce;
/*	
	*//**
	 * 跳转到用户列表显示页面
	 * @return
	 *//*
	@RequestMapping(value="users")
	public String toUsers() {
		
		return "users";
	}
	*//**
	 * 跳转到新增用户页面
	 * @return
	 *//*
	@RequestMapping(value="page/add")
	public String toUserAdd() {
		
		return "user-add";
	}
*/
	/**
	 * 通用的页面跳转方法！
	 * 	借助于requetMapping(占位符的方式，传递一些数据，达到页面跳转的目的)
	 * @param pageName
	 * @return
	 */
	@RequestMapping(value="page/{pageName}")
	public String toPage(@PathVariable("pageName")String pageName) {
		
		return pageName;
	}
	
	/**
	 * 分页查询用户信息：
	 *	请求路径是：/user/list
	 *	返回值：必须包含total，rows字段(封装成EasyUIResult对象，用@ResponseBody转换成json返回)
	 *	方法的参数：@RequestParam(“page”), @RequestParam(“rows”)
	 */
	@ResponseBody
	@RequestMapping("list")
	public EasyUIResult queryUsersByPage(@RequestParam("page")Integer pageNum, 
			@RequestParam("rows")Integer pageSize) {
		
		return this.userServicce.queryUsersByPage(pageNum, pageSize);
	}
	
	/**
	 * 新增用户的保存：
	 * 	1.请求路径：/user/save
	 * 
	 * 	2.请求参数：序列化后的“key=value&key=value...”，这里用User对象来接收、封装请求参数。
	 * 	(SpringMVC会将请求参数名和POJO实体中的属性名(set方法)进行自动匹配，如果名称一致，将把值填充到对象属性中，并且支持级联（例如：user.dept.id）)
	 * 
	 * 	3.方法返回值：{status:200}，封装到map中返回。但响应给浏览器的必须是json数据，所以用@ResponseBody转换成json。
	 */
	@RequestMapping("save")
	@ResponseBody
	public Map<String, Object> addUser(User user) {
		
		Map<String, Object> map = new HashMap<String, Object>();
		// 在controller层对异常做处理
		try {
			// 调用userService的新增方法
			Boolean flag = this.userServicce.addUser(user);
			if (flag) {
				map.put("status", "200");
			} else {
				map.put("status", "500");
			}
			
		} catch (Exception e) {
			map.put("status", "500");
			e.printStackTrace();
		}
		return map;
	}
	
	/**
	 * 修改用户：
	 * 	1.请求路径：/user/update
	 * 	2.请求参数：序列化后的“key=value&key=value...”，这里用User对象来接收、封装请求参数。
	 * 	3.方法返回值：{status:200}，封装到map中返回。但响应给浏览器的必须是json数据，所以用@ResponseBody转换成json。
	 */
	@RequestMapping("update")
	@ResponseBody
	public Map<String, Object> updateUser(User user) {
		
		Map<String, Object> map = new HashMap<String, Object>();
		// 在controller层对异常做处理
		try {
			// 调用userService的修改方法
			Boolean flag = this.userServicce.updateUser(user);
			if (flag) {
				map.put("status", "200");
			} else {
				map.put("status", "500");
			}
		} catch (Exception e) {
			map.put("status", "500");
			e.printStackTrace();
		}
		return map;
	}
	
	/**
	 * 删除用户：
	 * 	1.请求路径：/user/delete
	 * 	2.请求参数：以逗号分隔的ids，用List<Object> 接收
	 * 	3.响应数据：{status:200}，封装到map中返回
	 */
	@RequestMapping("delete")
	@ResponseBody
	public Map<String, Object> deleteUser(@RequestParam("ids")List<Object> ids) {
		
		Map<String,Object> map = new HashMap<String, Object>();
		
		try {
			Boolean flag = this.userServicce.deleteUser(ids);
			if (flag) {
				map.put("status", "200");
			}else {
				map.put("status", "500");
			}
		} catch (Exception e) {
			map.put("status", "500");
			e.printStackTrace();
		}
		return map;
	}
	
	/**
	 * 将用户信息到处到Excel表格：
	 * 1.请求路径：/user/export/excel
	 * 2.请求参数：page、rows 分页信息；在另一个视图显示信息，需要model传递数据!
	 * 3.响应数据：一个excel视图名称
	 */
	@RequestMapping("/export/excel")
	public String exportExcel(@RequestParam("page")Integer pageNum, 
			@RequestParam("rows")Integer pageSize, Model model) {
		
		EasyUIResult easyUIResult = this.userServicce.queryUsersByPage(pageNum, pageSize);
		model.addAttribute("userList", easyUIResult.getRows());
		
		return "userExcelView";
	}
	
	
	
	
	
	
	
}
